package ihm;

import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;

/**
 * The <code>XGridBag</code> helps to use the GridBagConstraints.<br>
 * This class defines styles reusable by differents components in a grid.
 *
 * To create a layout do the following step:<br>
 * - create a <code>GridBagLayout</code> and a XGridBag</code>.<br>
 * - prepare the components size (min/prefered/max).<br>
 * - create one or more style using <code>CellStyle.getStyle</code> method<br>
 * - add components to the grid using the <code>XGridBag.add</code> method.<br>
 * <br>
 * Example:<br>
 * <code>
 *   GridBagLayout layout = new GridBagLayout();<br>
 *   panel.setLayout(layout);<br>
 *   XGridBag grid = new XGridBag(panel);<br>
 *   <br>
 *   CellStyle style1 = new CellStyle(1.0, 0.0,<br>
 *      GridBagConstraints.WEST, GridBagConstraints.VERTICAL, insets, 4, 0);<br>
 *   ...<br>
 *   grid.add(comp1, style1, 0, 0);<br>
 *   grid.add(comp2, style1, 0, 1);<br>
 *   grid.add(comp3, style2, 1, 0);<br>
 *   ..<br>
 * </code>
 * @see CellStyle
 * @see java.awt.GridBagConstraints
 * @see java.awt.Insets
 */
public class XGridBag extends GridBagConstraints {

    public Container container;

    /**
     * Add a component to the container.
     * The component occupy only one cell width and heigth.
     *
     * @param c component to add
     * @param style cell style
     * @param row first Y cell
     * @param col first X cell
     * @see CellStyle
     */
    public void add(Component c, CellStyle style, int row, int col) {
        add(c, style, row, col, 1, 1);
    }

    /**
     * Add a component to the container.
     *
     * @param c component to add
     * @param style cell style
     * @param row first Y cell
     * @param col first X cell
     * @param rowHeight number of cells in a column (use GridBagConstraints.REMAINDER to fill out all rows to the end).
     * @param colWidth number of cells in a row (use GridBagConstraints.REMAINDER to fill out all columns to the end).
     * @see CellStyle
     */
    public void add(Component c, CellStyle style, int row, int col,
        int rowHeight, int colWidth) {
        this.gridx = col;
        this.gridy = row;
        this.gridwidth = colWidth;
        this.gridheight = rowHeight;
        this.fill = style.fill;
        this.ipadx = style.ipadx;
        this.ipady = style.ipady;
        this.insets = style.insets;
        this.anchor = style.anchor;
        this.weightx = style.weightx;
        this.weighty = style.weighty;
        container.add(c, this);
    }

    /**
     * XGridBag constructor.
     * @param container
     */
    public XGridBag(Container container) {
        super();
        this.container = container;
    }

}